Coursera - Deep Learning Specializaion

[Coures 4] Convolutional Neural Network


(Week 1) Convolutional Neural Network


두둥!!!Course 4가 시작되었습니다!!
- Course 1에서는 기본적인 Deep Neural Network를 만들고 Gradient Descent로 학습시켜서 고양이인지 맞추는 Binary Classification을 배웠습니다.
- Course 2에서는 Deep Neural Network의 성능을 향상 시키는 방법들을 배웠습니다. - Course 3에선 머신러닝과 딥러닝에서 학습하는 데이터들에 대해 다루게 되는데 이는 방학 때 하기로하고! 먼저 Course 4부터 하도록 하겠습니다! - Course 4에선 CNN을 배웁니다!! Course 1, 2에서 Standard NN에 대해 배웠으니 좀 더 심화된 NN을 배워봅시다!



  • week1에서 다루는 내용은 아래와 같습니다.

    1. Computer Vision
      (1)CV에선 무엇을 하나?
    2. CNN 기초
      (1)Convolution
      (2)Padding
      (3)Striding
      (4)Couvolution Over Volume
      (5)Pooling
    3. Simple Example of CNN
      (1)Simple Example of CNN
      (2)Why CNN?


1. Computer Vision


(1) CV에선 무엇을 하나?


Imgur


- Computer Vision에서 다루는 대표적인 문제들로는 Image Classification, Object detection, Neural Style Transfer 등이 있다. - Image Classification는 우리가 Course 1,2에서 다루었던 것처럼 Cat인지 아닌지 구별하거나, 그 물체가 무엇인지 구분하는 것이다. - Object detection은 사진에서 어떠한 물체들이 있는지 detection하는 것이다. 보통 물체에 박스를 쳐서 어떤 물체인지 구분한다. - Neural Style Transfer은 Content Image와 Style Image를 결합하여 새로운 주어진 Style의 Content Image를 만들어내는 것이다.


Imgur


- 또한 간단한 예로, 특정 성분을 detection하는 것도 있다. 위에서 볼 수 있듯이 이목구비를 detection하거나 verical, horizontal edges를 detection하는 것 등이 있다. edge detection은 바로 다음 (2)CNN 기초에서 살펴볼 것이다.

Imgur


- 그럼 딥러닝에서 image를 학습시킬 땐 어떻게 할까? Course 1, 2에서 배웠던 것처럼 Standard NN 모델을 이용하여 학습할 수 있지만 그러면 모델의 parameter가 너무 많아지게 된다. 100010003 픽셀의 고양이 이미지를 분류하려면 적어도 첫 Layer에 300만개 이상의 parameter가 필요하고 이를 학습시키려면 엄청난 컴퓨팅 파워가 필요하다. - Convolution을 이용하는 NN 즉 CNN을 사용하면 훨씬 적은 컴퓨팅 cost로 좋은 결과를 얻을 수 있다. 따라서 이미지를 학습할 때 CNN을 거의 대부분 이용한다. 이는 마지막에 다시 언급할 것이다.



2. CNN 기초


(1) Convolution



- 그럼 우선 Convolution에 대해 알아보겠습니다. Convolution의 한글뜻은 합성곱입니다. 합성곱만으로는 무슨의미인지 잘 모르겠습니다. 그럼 Convolution 연산을 어떻게 하는지 Vertical edge detection을 예시로 알아보도록 하겠습니다.


Imgur

  • 6x6의 input image에 대해서 3x3 filter로 convolution한다고 가정하자. 여기서 input image는 2차원이므로 gray scale이다. RGB(3차원)이라면 여러색깔의 이미지다!

  • 그럼 filter란 무엇인가? 말그대로 filter이다. 이미지를 걸러주어 vertical edge를 detection을 해준다. 따라서 목적에 따라 filter안의 값들은 달라진다. 보통 filter는 정방행렬(정사각형 모양)을 사용하고 필터 size(필터 한변의 길이)는 홀수를 이용한다. 그 이유는 필터의 센터가 존재하면 필터의 위치를 쉽게 파악할 수 있기 때문이다. 여기에서는 filter size(f)는 3이 된다. kernel이란 용어를 filter대신 사용하기도 한다.

- *연산을 convolution이라 한다. input image의 왼쪽 위부터 시작해서 필터가 모든 구역을 필터링하며 convolution을 하게 된다. 보라색으로 표시한 부분에서 convolution을 하면 image와 filter에서 같은 위치의 값을 곱하고 그 값들을 다 더한것이 해당 부분에서의 convolution의 결과이다. 여기서는 $11 + 16 + 12 + 70 + 20 + 30 + 8(-1) + 8(-1) + 9*(-1) = -16$이 된다.


Imgur

  • 그럼 위의 필터가 어떻게 vertical edge를 detect하는지 알아보자. 간단한 input이미지를 예로 들어보자. 세로로 하얀색, 회색이 반반되어 있는 image를 위의 필터로 convolution한 결과는 위에서 확인 할 수 있다. 가운데 세로로 굵은 하얀 영역이 생기게 된다. 이 이유는 필터가 세로선을 기준으로 왼쪽 오른쪽 값이 다른 이미지들은 더욱 강조하기 때문이다. 필터가 1,0,-1순으로 되어 있으므로! 여기서는 input size가 작으므로 흰영역이 매우 굵게 나타나는데 실제 큰 size의 이미지에선 얇은 선으로 나타나게 된다.
  • 값이 0이면 회색, 클수록 하얗고 작을수록 검어진다.


Imgur

- 필터의 좌우를 바꾸면 가운데 영역이 검은색으로 변하게 된다. 단순히 값의 절댓값만 바뀌므로!


Imgur

- vertical edge detection의 filter를 90도 돌리면 horizontal edge detection의 filter가 된다.


Imgur

  • 그럼 filter의 값은 정해져 있을까? 같은 목적(vertical edge detection)이라도 filter에 weight를 줄 수 있다. vertical edge detection의 대표적인 filter들로는 Sobel filter, Schorr filter 등이 있다. 그리고 목적에 따라서 filter의 weight들은 학습 될 수 있다. 즉 filter도 learning parmeter이다!!!!CNN에서 중요한 부분이다! filter도 learning parameter라는 것!

(2) Padding

Imgur

- 이번엔 Padding에 대해 알아보자. Padding은 뜻 그대로 덧대는 것이다. convolution을 진행하면 ouput size는 input size보다 작아지게 된다. 이를 방지하기 위해서 input size 테두리에 값을 덧대는 것이 padding이다. 위의 예에서 input에 한겹을 padding한다고 하면 output size는 6x6으로 input size랑 같아지게 된다. 어떤값으로 padding을 하는 것인지는 programming exercise에서 보도록 하자.


Imgur

  • padding을 안하는 convolution을 "Valid"라 하고 padding을 하여 input size와 똑같은 output size가 되도록 하는 convolution을 "Same"이라 한다.

(3) Striding

Imgur

- Stride이란 filter를 얼만큼 간격으로 움직일지를 뜻한다. 지금까지 본 예시들을 stride = 1이 엇다. 즉 filter를 한칸씩 움직였다는 뜻이다.


Imgur

  • 지금까지의 용어를 정리하면 위와 같다.
  • input image를 size(n)를 이용해서 나타내면 n x n image라 하고, filter를 size(f)를 이용해서 나타내면 f x f filter이다. padding하는 겹 수를 p, filter를 움직이는 간격인 stride를 s라 한다.
  • 그럼 output image의 size를 계산하는 방법은 위와 같다.
    $Output size = RoundDown((n+2p-f)/s + 1$
    간단한 예시로 계산해보면 이해가 될 것이다!

(4) Convolution Over Volume

Imgur

  • 3차원(RGB)에서의 Convolution을 살펴보자. input image가 3차원이므로 filter도 3차원이 된다. RGB image를 R, G, B 순서대로 1번째 겹, 2번째 겹, 3번째 겹이라 해보자. filter도 마찬가지로 하겠다. 그러면 input image의 1번째 겹을 filter의 1번째 겹으로 convolution을 하고 2번째, 3번째 겹도 마찬가지로 진행한다. 그 결과 겹마다 나오는 3개의 값을 합하면 최종적으로 convolution의 결과값이 된다.
  • 정리하자면 input image의 channel 수(겹 수, RGB라면 3)와 filter의 겹수는 같아야 한다.


Imgur

- 그럼 filter를 여러개를 사용할 때를 알아보자. 특별한 것은 없고 filter마다 convolution한 결과를 겹겹이 쌓아주면 된다. 즉 output의 겹 수는 filter의 개수가 된다.


(5) Pooling

  • Pooling을 하면 Overfitting을 줄일 수 있고, 계산량을 줄일 수 있다.
  • Pooling에는 여러종류가 있지만 대표적이고 간단한 2가지 Pooling인 Max pooling과 Average Pooling을 살펴보자.

Imgur

  • Max Pooling이란 Max값을 뽑아내는 filtering이다. 위의 예시에선 2x2 filter, stride =2로 Pooling을 한 결과이다. 즉 input image를 간격 2로 분할하고 분할된 구역에서 가장 큰 값을 가져온다.
  • Max Pooling을 하면 큰 값들이 나오게 되니 특징을 좀더 뚜렷하게 볼 수 있게 된다.
  • Max Pooling은 가장 많이 사용되는 풀링은 아니지만 Average Pooling보다는 많이 사용된다.


Imgur

- Average Pooling은 해당 구역의 평균값을 반환하는 Pooling이다.


Imgur

  • Pooling의 output image의 size를 계산하는 것은 위와 같다. 이미 위에서 한번 다룬 내용이므로 넘어간다.
  • Pooling에서는 Learning parameter가 존재하지 않는다. 어떤 Pooling을 사용할지 정하는 것만이 parameter이다.


3. Simple Example of CNN


(1) Simple Example of CNN

Imgur

  • CNN의 한 Layer을 예시로 봐보자. 먼저 input image를 여러개의 filter로 convoltion을 하고, 그 결과에 bius(b)를 더하고(element wise operation), 다시 이 결과를 Relu같은 비선형 함수에 넣으면 해당 Layer의 Activation이 된다. 즉 Standard NN에서의 연산과 거의 비슷하다고 생각하면 된다. W를 Product해주는 것과 convolution하는 것과 같다고 생각하면 된다. 이후 pooling까지 진행한다. 즉 1개의 Layer에서 Convolution과 pooling이 한번씩 진행된다.
  • 연구자 마자 layer를 나누는 기준을 다르게 정할 수 있지만 우리는 위와 같이 진행할 것이다.

- convolution도 결국 선형 연산이므로 비선형 함수인 Activation Fuction에 값을 넣어서 비선형화 해줘야한다.


Imgur

- 마지막으로 notation을 정리하면 위와 같다.


Imgur

  • 그럼 이제 간단한 CNN을 살펴보기 위해 CNN이 이루어져 있는 Block들을 정리해보자.
  • CNN은 Convolution(CONV), Pooling(POOL), Fully connected NN(FC)로 이루어져 있다. FC는 Course 1,2에서 배운 Standard NN과 같은 것이다.


Imgur

  • 간단한 CNN의 예는 위와 같다. 총 4개의 Layer로 이루어져 있다.
  • 손으로 쓴 7을 7이라고 분류하려고 한다. 7 image가 convolution하고 pooling하는 layer 두개를 거치고 FC 2개를 거쳐 최종적으로 Softmax 함수에 넣어져 분류된다.
  • 일반적으로 CNN에서 output은 얇고 길어진다. 즉 n은 줄어들고 channel수는 증가한다.
  • FC의 연산과 학습은 Standard NN과 동일하다.


Imgur

  • 위의 CNN을 표로 정리하면 위와 같다.
  • Layer가 깊어 질수록 Activation Size는 줄어드는데, size를 너무 급격하게 줄이면 모델의 성능이 안좋다고 한다.
  • 여기서 주목할 것은 parameter의 수이다. CONV와 FC의 parameter 수가 현저하게 차이난다는 것이다.


Imgur

  • 고양이 분류 CNN을 간단하게 나타내면 위와 같다.

(2) Why Convolution?

Imgur

  • 그럼 왜 Standard NN을 사용하지 않고 Convolution을 사용할까? 장점들을 살펴보자. (1) 바로 위에서 확인한 것처럼 parameter의 수가 확연히 적다는 점이다. 적으면서 성능까지 좋다! (2) 위의 그림에서 볼 수 있듯이 parameter 140만개가 156개까지 줄어든다. (3) 파라미터 수는 이미지 크기에 상관없이 작게 고정되어 있어 오버피팅을 방지할 수 있고 좋다! (4) Parameter Sharing - 예를 들어 Verticla edge detection 필터는 이미지 전체 부분에 적용될 수 있다. 즉 이미지 부분(위치)마다 다른 필터값을 넣는게 같은 값으로 Convolution! 공유! (5) Sparsity of Connection - 계산에 필요한 input image 영역을 제외하면 계산에 포함되지 않으므로 계산에 영향을 끼치지 않는다.


끝!